package com.taotao.anno.sg;


import com.google.auto.service.AutoService;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;


/**
 * @SupportedAnnotationTypes 注解表示哪些注解需要注解处理器处理，
 * 可以多个注解校验 @SupportedSourceVersion 注解 用于指定jdk使用版本
 * <p>
 * <p>
 * 如果不使用注解也可以在重写父类方法
 * Set<String> getSupportedAnnotationTypes()
 * S ourceVersion getSupportedSourceVersion
 */
//@SupportedAnnotationTypes({"com.taotao.anno.sg.Data"})
@SupportedSourceVersion(SourceVersion.RELEASE_8)
//  @AutoService 是Google开源的一个小插件，它可以自动的帮我们生成META-INF/services 的文件,也就不需要你去手动的创建配置文件了
@AutoService(Processor.class)
public class DataProcessor extends AbstractProcessor {

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        // 与注解 @SupportedAnnotationTypes({"com.taotao.anno.sg.Data"})  功能相同
        return new HashSet<>(Arrays.asList(Data.class.getName()));
    }


//    @Override
//    public SourceVersion getSupportedSourceVersion() {
//        //设置为能够支持最新版本   @SupportedSourceVersion 等效
//        return SourceVersion.latestSupported();
//    }
//


    @Override
    public synchronized void init(ProcessingEnvironment pe) {
        super.init(pe);
        System.out.println("Processor.init.....");
        // 可以获取到编译器参数（下面两个是一样的）
        System.out.println(processingEnv.getOptions());
        System.out.println(pe.getOptions());

    }


    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {


        /**
         * 如果返回 true，则这些注解不会被后续 Processor 处理；
         * 如果返回 false，则这些注解可以被后续的 Processor 处理。
         *
         */
        return false;
    }
}


